﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Aeroporto.controle;
using Aeroporto.modelo;
using Aeroporto.bd;
using System.Collections;
using Aeroporto.visao;
using Npgsql;


namespace Aeroporto.visão
{
    public partial class formCadastroVoo : Form
    {
        private VooControl control_voo = new VooControl();
        private string companhia_atual;

        public formCadastroVoo(string companhia)
        {        
            InitializeComponent();
            this.companhia_atual= companhia;
            this.te_siglaComp.Text = companhia_atual;
            DataTable dt = control_voo.lista_dados("aeroporto");

            cb_origem.DataSource = dt;
            cb_origem.ValueMember = "nome";
            cb_origem.DisplayMember = "cod_iata";

            DataTable dt2 = control_voo.lista_dados("aeroporto");
            cb_destino.DataSource = dt2;
            cb_destino.ValueMember = "nome";
            cb_destino.DisplayMember = "cod_iata";
        }                                    

        private void lista_dados()
        {
            try
            {
                grid_trechos.DataSource = control_voo.pesquisar_siglas(companhia_atual);
                this.grid_trechos.Columns["Horario"].DefaultCellStyle.Format = "HH:mm:ss ";

                grid_trechos.Sort(grid_trechos.Columns["id_trecho"], ListSortDirection.Ascending);
                
                grid_trechos.Columns["id_trecho"].HeaderText = "IDTrecho";
                    grid_trechos.Columns["id_trecho"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                
                grid_trechos.Columns["sigla_comp"].HeaderText = "Sigla Companhia";
                grid_trechos.Columns["sigla_comp"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                
                grid_trechos.Columns["num_voo"].HeaderText = "Número Voo";
                grid_trechos.Columns["num_voo"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["origem"].HeaderText = "Origem do Trecho";
                grid_trechos.Columns["origem"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["destino"].HeaderText = "Destino do Trecho";
                grid_trechos.Columns["destino"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["horario"].HeaderText = "Horario";
                grid_trechos.Columns["horario"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["seg"].HeaderText = "Segunda";
                    grid_trechos.Columns["seg"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                grid_trechos.Columns["ter"].HeaderText = "Terça";
                    grid_trechos.Columns["ter"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                
                grid_trechos.Columns["qua"].HeaderText = "Quarta";
                grid_trechos.Columns["qua"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["qui"].HeaderText = "Quinta";
                grid_trechos.Columns["qui"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["sex"].HeaderText = "Sexta";
                grid_trechos.Columns["sex"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["sab"].HeaderText = "Sabado";
                grid_trechos.Columns["sab"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

                grid_trechos.Columns["dom"].HeaderText = "Domingo";
                grid_trechos.Columns["dom"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                //grid_trechos.Columns["diaSemana"].HeaderText = "Dia da Semana";
                //atualiza_campos();
                grid_trechos.ReadOnly = true;

                //int w = Screen.PrimaryScreen.Bounds.Width;
                //int h = Screen.PrimaryScreen.Bounds.Height;
                //MessageBox.Show("Minha tela é w: "+w+" por h: "+h,"");
            }
            catch (Exception erro)
            {
                MessageBox.Show("Erro na listagem do Grid: " + erro);
            }
        }

        private void atualiza_campos()
        {
            int linha = grid_trechos.CurrentRow.Index;
            te_idTrecho.Text = grid_trechos[12, linha].Value.ToString();
            //te_siglaComp.Text = grid_trechos[0, linha].Value.ToString();
            te_siglaComp.Text = companhia_atual;
            te_numVoo.Text = grid_trechos[1, linha].Value.ToString();
            cb_origem.SelectedIndex = cb_origem.FindString(grid_trechos[2, linha].Value.ToString().Substring(0,3));
            cb_destino.SelectedIndex = cb_destino.FindString(grid_trechos[3, linha].Value.ToString().Substring(0, 3));
            ma_horario.Text = grid_trechos[4, linha].Value.ToString().Substring(11);
            /*
            if (ma_horario.Text.Length > 11)
            {
                Arquivo.escrever(ma_horario.Text.Substring(11));
                ma_horario.Text = ma_horario.Text.Substring(11);
            }*/
                        
            try
            {
                cb_segunda.Checked = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[5].Value) == true ? true : false;
                cb_terca.Checked   = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[6].Value) == true ? true : false;
                cb_quarta.Checked  = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[7].Value) == true ? true : false;
                cb_quinta.Checked  = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[8].Value) == true ? true : false;
                cb_sexta.Checked   = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[9].Value) == true ? true : false;
                cb_sabado.Checked  = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[10].Value) == true ? true : false;
                cb_domingo.Checked = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[11].Value) == true ? true : false;
            }
            catch (Exception e)
            {
                //checkBox_Unchecked();
                Arquivo.escrever(e.ToString());
            }            
        }
        /*
                private void limpar()
                {
                    te_idTrecho.Text = "";
                    te_siglaComp.Text = companhia_atual;
                    te_numVoo.Text = "";
                    te_origemTrecho.Text = "";
                    te_destinoTrecho.Text = "";
                    te_horario.Text = "";
                    checkBox_Unchecked();
                }
                

                private void b_deletar_Click(object sender, EventArgs e)
                {
                    if (te_idTrecho.Text == "" && te_numVoo.Text == "" && te_origemTrecho.Text == "" && te_destinoTrecho.Text == "" && te_horario.Text == "")
                    {
                        MessageBox.Show("Selecione um trecho na tabela de Trechos para excluir!", "Atenção:");
                        return;
                    }

                    ArrayList chaves_primarias = new ArrayList();
                    foreach (DataGridViewRow r in grid_trechos.SelectedRows)
                    {
                        chaves_primarias.Add(r.Cells[12].Value.ToString());
                    }

                    if (MessageBox.Show("Tem certeza que deseja excluir " + chaves_primarias.Count + " trechos", "Trecho", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        MyMessageBox message_box = control_voo.excluir_trecho(chaves_primarias);
                        MessageBox.Show(message_box.String1, message_box.String2);
                        lista_dados();
                    }
                }

                private void b_editar_Click(object sender, EventArgs e)
                {
                    string chave_primaria_antiga = grid_trechos[12, grid_trechos.CurrentCell.RowIndex].Value.ToString();   //pegamos a chave primária antiga que se encontra no grid, pois, precisamos verificar se a chave primária foi alterada
                    MyMessageBox message_box = control_voo.valida_update_trecho(
                        companhia_atual, te_numVoo.Text, te_origemTrecho.Text, te_destinoTrecho.Text, te_idTrecho.Text, te_horario.Text, chave_primaria_antiga, cb_segunda.Checked, cb_terca.Checked, cb_quarta.Checked, cb_quinta.Checked, cb_sexta.Checked, cb_sabado.Checked, cb_domingo.Checked);//valida e atualiza os dados da reserva
                    MessageBox.Show(message_box.String1, message_box.String2);//exibe mensagem dizendo se foi ou não atualizado os dados
                    lista_dados();//atualiza os dados do grid
                }

                private void bu_atualizar_Click(object sender, EventArgs e)
                {
                    lista_dados();
                }

                private void formTrecho_FormClosed(object sender, FormClosedEventArgs e)
                {
                    Application.Exit();
                }

                private void grid_trechos_CellEnter(object sender, DataGridViewCellEventArgs e)
                {         
                    atualiza_campos();            
                }
        
                private void grid_trechos_CellContentClick(object sender, DataGridViewCellEventArgs e)
                {
                    atualiza_campos();            
                }
        
                private void b_limpar_Click(object sender, EventArgs e)
                {
                    limpar();
                }*/

        private void formCadastroVoo_Load(object sender, EventArgs e)
        {
            lista_dados();
            //te_siglaComp.ReadOnly = true;
            //te_idTrecho.Select();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            formPesquisaAeroporto form = new formPesquisaAeroporto();
            form.Show();
        }

        private void button1_MouseEnter(object sender, EventArgs e)
        {
            label9.Text = "Não sei o código do aeroporto.";
        }

        private void button1_MouseLeave(object sender, EventArgs e)
        {
            label9.Text = "";
        }

        private void te_pesquisar_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                bu_pesquisar_Click(sender, e);
            }
        }   

        private void bu_pesquisar_Click(object sender, EventArgs e)
        {
            //Quando o botão Pesquisar é clicado, o DataSource do grid_reservas é alterado                           
            grid_trechos.DataSource = control_voo.pesquisar_num_voo(te_pesquisar.Text, companhia_atual);        
        }

        private void b_limpar_Click(object sender, EventArgs e)
        {            
            te_idTrecho.Text = "";
            te_numVoo.Text = "";
            ma_horario.Text = "__:__:__";
            cb_domingo.Checked = false;
            cb_quarta.Checked = false;
            cb_quinta.Checked = false;
            cb_sabado.Checked = false;
            cb_segunda.Checked = false;
            cb_sexta.Checked = false;
            cb_terca.Checked = false;
        }

        private void bu_atualizar_Click(object sender, EventArgs e)
        {
            lista_dados();
        }

        private void b_inserir_Click(object sender, EventArgs e)
        {            
            MyMessageBox message_box = control_voo.valida_insert_voo(
                te_idTrecho.Text, te_numVoo.Text, ma_horario.Text, 
                cb_segunda.Checked, cb_terca.Checked, cb_quarta.Checked, 
                cb_quinta.Checked, cb_sexta.Checked, cb_sabado.Checked, cb_domingo.Checked, 
                companhia_atual, cb_origem.Text, cb_destino.Text);  //valida 
            if (message_box != null)
            {
                MessageBox.Show(message_box.String1, message_box.String2);
                if (message_box.String2 == "OK")
                {
                    lista_dados();
                }
            }                 
        }

        private void b_deletar_Click(object sender, EventArgs e)
        {            
            ArrayList voos = new ArrayList();
            ArrayList trechos = new ArrayList();

            foreach (DataGridViewRow r in grid_trechos.SelectedRows)
            {
                voos.Add(r.Cells[1].Value.ToString());
                trechos.Add(r.Cells[12].Value.ToString());
            }

            if (MessageBox.Show("Tem certeza que deseja excluir " + voos.Count + " voo (s)", "Aeronave", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                MyMessageBox message_box = control_voo.exclui_voo(voos, trechos, te_siglaComp.Text);
                MessageBox.Show(message_box.String1, message_box.String2);
                lista_dados();
            }         
        }

        private void b_editar_Click(object sender, EventArgs e)
        {
            string num_voo_antiga = grid_trechos[1, grid_trechos.CurrentCell.RowIndex].Value.ToString();   //pegamos a chave primária antiga que se encontra no grid, pois, precisamos verificar se a chave primária foi alterada
            string id_trecho_antigo = grid_trechos[12, grid_trechos.CurrentCell.RowIndex].Value.ToString();   //pegamos a chave primária antiga que se encontra no grid, pois, precisamos verificar se a chave primária foi alterada

            try
            {
                MyMessageBox message_box = control_voo.valida_update_voo(
                    te_idTrecho.Text, te_numVoo.Text, ma_horario.Text,
                    cb_segunda.Checked, cb_terca.Checked, cb_quarta.Checked,
                    cb_quinta.Checked, cb_sexta.Checked, cb_sabado.Checked, cb_domingo.Checked,
                    companhia_atual, cb_origem.Text, cb_destino.Text, num_voo_antiga, id_trecho_antigo);

                MessageBox.Show(message_box.String1, message_box.String2);
                if (message_box.String2 != "Atenção" && message_box.String2 != "Erro")
                {
                    lista_dados();
                    te_numVoo.Text = num_voo_antiga;
                    te_idTrecho.Text = id_trecho_antigo;
                }
            }
            catch (NpgsqlException erro)
            {
                MessageBox.Show(erro.ToString());
            }
        }

        private void grid_trechos_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            
        }

        private void grid_trechos_DoubleClick(object sender, EventArgs e)
        {
            atualiza_campos();
        }

        private void button2_MouseEnter(object sender, EventArgs e)
        {
            label10.Text = "Para cadastrar uma data de viagem selecione o voo na tabela ao lado com um duplo clique ";
        }

        private void button2_MouseLeave(object sender, EventArgs e)
        {
            label10.Text = "";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string id_trecho = te_idTrecho.Text;
            string num_voo = te_numVoo.Text;
            string companhia = te_siglaComp.Text;
            if (id_trecho == "" || num_voo == "")
            {
                MessageBox.Show("Para cadastrar uma data de viagem selecione o voo na tabela ao lado com um duplo clique ", "Erro");
            }
            else
            {
                formInstanciar instanciar = new formInstanciar(companhia, num_voo.Substring(0, 4), id_trecho, 
                    ma_horario.Text, cb_segunda.Checked, cb_terca.Checked, cb_quarta.Checked, cb_quinta.Checked, 
                    cb_sexta.Checked, cb_sabado.Checked, cb_domingo.Checked, cb_origem.Text, cb_destino.Text);
                instanciar.Show();
            }
        }

        private void grid_trechos_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void formCadastroVoo_FormClosed(object sender, FormClosedEventArgs e)
        {

        }

       
    }
}
